package org.wupuser.controller;

import jakarta.annotation.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.wupuser.model.DTO.LoginRequest;
import org.wupuser.model.DTO.UpdateUserRequest;
import org.wupuser.model.User;
import org.wupuser.service.UserService;

@RestController
public class UserController {
	
	@Resource
	private UserService userService;
	
	/**
	 * 处理用户登录请求的POST接口方法
	 *
	 * @param user 包含用户登录信息的请求体，包含邮箱和密码
	 *
	 * @return 返回HTTP响应实体，包含登录结果信息
	 */
	@PostMapping("user/login")
	public ResponseEntity<LoginRequest> userLogin(
		@RequestBody    // 请求注解，表示将请求体映射到User对象
		User user) {    // 接收包含用户登录信息的User对象
		// 调用userService的login方法处理登录逻辑，传入邮箱和密码
		LoginRequest loginRequest = userService.login(
			user.getEmail(),
			user.getPassword());
		// 判断登录是否成功
		if (loginRequest.getMessage()
			.equals("登录成功")) {
			// 登录成功，返回HTTP 200状态码和登录结果
			return ResponseEntity.status(200)
				.body(loginRequest);
		} else {
			// 登录失败，返回HTTP 400状态码和登录结果
			return ResponseEntity.status(400)
				.body(loginRequest);
		}
	}
	
	/**
	 * 处理用户注册请求的接口方法
	 *
	 * @param user 包含用户注册信息的请求体，自动映射到User对象
	 *
	 * @return 返回ResponseEntity，包含状态码和响应体 注册成功返回200状态码和"注册成功"消息 注册失败返回400状态码和错误信息
	 */
	@PostMapping("user/register")
	public ResponseEntity<?> userRegister(@RequestBody User user) {
		// 调用userService的reg方法处理用户注册逻辑
		String result = userService.reg(user);
		// 判断注册结果
		if (result.equals("注册成功")) {
			// 注册成功，返回200状态码和成功消息
			return ResponseEntity.status(200)
				.body(result);
		} else {
			// 注册失败，返回400状态码和错误信息
			return ResponseEntity.status(400)
				.body(result);
		}
	}
	
	/**
	 * 更新用户信息的接口方法
	 *
	 * @param updateUserRequest 包含更新用户信息的请求体
	 *
	 * @return 返回响应实体，包含状态码和结果信息
	 */
	@PostMapping("user/update/info")
	public ResponseEntity<?> updateUserInfo(
		@RequestBody    // 请求体注解，表示参数从请求体中获取
		UpdateUserRequest updateUserRequest) {    // 更新用户信息的请求对象
		String result = userService.updateUser(updateUserRequest);    // 调用服务层方法更新用户信息
		if (result.equals("修改成功")) {    // 判断更新是否成功
			return ResponseEntity.status(200)    // 成功则返回200状态码
				.body(result);    // 返回成功信息
		} else {    // 更新失败的情况
			return ResponseEntity.status(400)    // 返回400状态码表示请求错误
				.body(result);    // 返回错误信息
		}
	}
	
	/**
	 * 处理用户头像上传请求的控制器方法
	 *
	 * @param avatar 用户上传的头像文件
	 * @param email  用于标识要更新头像的用户
	 *
	 * @return 返回响应实体，包含状态码和操作结果信息
	 */
	@GetMapping("user/avatar")
	public ResponseEntity<?> userAvatarUpload(
		@RequestParam  // 请求参数注解，表示该参数来自HTTP请求
		MultipartFile avatar,
		// 上传的头像文件
		@RequestParam  // 请求参数注解
		String email) {  // 用户邮箱
		// 调用用户服务层的方法处理头像更新
		String result = userService.userAvatarUpdate(
			avatar,
			email);
		// 判断操作结果
		if (result.equals("修改成功")) {
			// 如果操作成功，返回200状态码和成功信息
			return ResponseEntity.status(200)
				.body(result);
		} else {
			// 如果操作失败，返回400状态码和错误信息
			return ResponseEntity.status(400)
				.body(result);
		}
	}
	
	/**
	 * 处理用户退出请求的接口方法
	 *
	 * @param email 用户邮箱，作为退出系统的标识
	 *
	 * @return 返回ResponseEntity对象，包含状态码和响应体 - 退出成功时返回状态码200和"退出成功"消息 - 退出失败时返回状态码400和相应的错误消息
	 */
	@GetMapping("user/logout")
	public ResponseEntity<?> userLogout(@RequestParam String email) {
		// 调用userService的exit方法处理用户退出逻辑
		String result = userService.exit(email);
		// 判断退出操作的结果
		if (result.equals("退出成功")) {
			// 如果退出成功，返回状态码200和成功消息
			return ResponseEntity.status(200)
				.body(result);
		} else {
			// 如果退出失败，返回状态码400和错误消息
			return ResponseEntity.status(400)
				.body(result);
		}
	}
}
